Begynner virkelig å føle tidspresset nå!
Platene som er til eloksering er ENDA mer forsinket, hvis de ikke blir ferdig til Onsdag må jeg hente de uansett.
Har startet å plukke deler fra min gamle PC, og har gjort klart til å montere alt når platene kommer.
Måtte også snu vifta til strømforsyningen 180 grader, så det er nå i boks.
Når det kommer til programmering av styring til vannkjøling, er jeg på god vei! Har endelig knekt koden
Arduinoen mottar en streng med informasjon om hastighet på vifter/pumpe og fargekoder til RGB lysene. I tillegg sender den verdier fra analog inngangen.
Er enda mye programmering igjen, men så lenge styring av vifter, pumpe og lys fungerer, så har jeg noe å pusle med på The Gathering
Slik ser programmet ut hittil:
Kode
//Styring av vannkjøling v3.0
//LabView sender hastighet på vifter, pumpe og fargekoder til lysene
//Arduino sender informasjon om temperatur og strømning i rørene
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"
#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
#define PIN 6 // Definerer hvilken pinne NeoPixelene er koblet til
#define NUMPIXELS // Definerer antal NeoPixler som er kolet til
const byte buffSize = 40;
char inputBuffer[buffSize];
const char startMarker = '<'; // Startmerke til string fra PC
const char endMarker = '>'; // Endemerke til string fra PC
byte bytesRecvd = 0;
boolean readInProgress = false;
boolean newDataFromPC = false;
char messageFromPC[buffSize] = {0};
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *fanOne = AFMS.getMotor(1); // Vifter til radiator 1 er koblet til kanal M1
Adafruit_DCMotor *fanTwo = AFMS.getMotor(2); // Vifter til radiator 2 er koblet til kanal M2
Adafruit_DCMotor *pump = AFMS.getMotor(2); // Vannpumpe er koblet til kanal M3
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); // Oppsett av NeoPixler
int fanOneSpeed = 255; // Oppstartshastighet til radiator 1
int fanTwoSpeed = 255; // Oppstartshastighet til radiator 2
int pumpSpeed = 255; // Oppstartshastighet til vannpumpe
int red = 0; // Rødfarge til NeoPixel
int green = 0; // Grønnfarge til NeoPixel
int blue = 255; // Blåfarge til NeoPixel
int sensorPin = A0; // Lyssensor for test
int sensorValue; // Verdi til lyssensor
void setup() {
Serial.begin(9600);
AFMS.begin(); // Deafault frekvens til motorshield. Ingen spesifisert = 1,6KHz
pixels.begin();
fanOne->setSpeed(fanOneSpeed); // Oppstart av vifter til radiator 1
fanOne->run(FORWARD); // Rotasjonsretning
fanTwo->setSpeed(fanTwoSpeed); // Oppstart av vifter til radiator 2
fanTwo->run(FORWARD); // Rotasjonsretning
pump->setSpeed(pumpSpeed); // Oppstart av vannpumpe
pump->run(FORWARD); // Rotasjonsretning
}
void loop() {
ReciveData(); // Mottar data
updateValues(); // Oppdaterer verdier
readTemp(); // Leser temperatur
Test(); // Sender verdier til PC
}
void ReciveData() { // Mottar data fra PC, og lagrer den i inputBuffer
if(Serial.available() > 0) { // Hvis vi mottar data
char x = Serial.read(); // Leser karakter for karakter
if (x == endMarker) { // Hvis lest karakter er >
readInProgress = false;
newDataFromPC = true; // Sier ifra at vi har mottat nye verdier
inputBuffer[bytesRecvd] = 0;
parseData();
}
if(readInProgress) { // Hvis vi enda leser strengen
inputBuffer[bytesRecvd] = x; // Lagrer karakteren i inputBuffer
bytesRecvd ++;
if (bytesRecvd == buffSize) { // Hvis vi har fylt opp bufferen
bytesRecvd = buffSize - 1;
}
}
if (x == startMarker) { // Hvis vi mottar <, altså starten på strengen
bytesRecvd = 0;
readInProgress = true;
}
}
}
void parseData() { // Flytter verdiene i inputBuffer til riktig variabel
char * strtokIndx;
strtokIndx = strtok(inputBuffer,";"); // get the first part - the string
fanOneSpeed = atoi(strtokIndx); // Kopierer verdien til riktig variabel
strtokIndx = strtok(NULL, ";"); // Henter ut neste del av strengen
fanTwoSpeed = atoi(strtokIndx); // Kopierer verdien til riktig variabel
strtokIndx = strtok(NULL, ";"); // Henter ut neste del av strengen
pumpSpeed = atoi(strtokIndx); // Kopierer verdien til riktig variabel
strtokIndx = strtok(NULL, ";"); // Henter ut neste del av strengen
red = atoi(strtokIndx); // Kopierer verdien til riktig variabel
strtokIndx = strtok(NULL, ";"); // Henter ut neste del av strengen
green = atoi(strtokIndx); // Kopierer verdien til riktig variabel
strtokIndx = strtok(NULL, ";"); // Henter ut neste del av strengen
blue = atoi(strtokIndx); // Kopierer verdien til riktig variabel
}
void Test() {
if (newDataFromPC) {
newDataFromPC = false;
Serial.print("Radiator 1");
Serial.println(fanOneSpeed);
Serial.print("Radiator 2");
Serial.println(fanTwoSpeed);
Serial.print("Vannpumpe");
Serial.println(pumpSpeed);
Serial.print("Red");
Serial.println(red);
Serial.print("Green");
Serial.println(green);
Serial.print("Blue");
Serial.println(blue);
Serial.print("Light");
}
}
void updateValues() {
fanOne->setSpeed(fanOneSpeed);
fanOne->run(FORWARD);
fanTwo->setSpeed(fanTwoSpeed);
fanTwo->run(FORWARD);
pump->setSpeed(pumpSpeed);
pump->run(FORWARD);
pixels.setPixelColor(1, pixels.Color(red,green,blue)); // Fargeblanding
pixels.show(); // Sender informasjonen til pixlene
}
void readTemp() {
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(10);
}
@GreenRay
Sist endret av GreenRay; 28. oktober 2019 kl. 10:06.