Ryerson MEC830 Mechbot Custom seriell kommunikation (3 / 4 steg)
Steg 3: Algoritm för mottagande och överföring av data
För att överföra data, jag har skrivit två funktioner för att utföra denna process, de är: send_data(int num) och completion_Scan().
Jag har tilldelat variabler med koden för tabellen för de 2 första scenarierna kallas höger och vänster. Det här exemplet kommer vi bara fokuserar på kommunikation att bollen är på vänster eller höger sida. När platsen för bollen bestäms skickas värdet till funktionen send_data där heltalet delas upp i en matris och värden pulsad high(1) eller low(0). När alla värden är pulsade, funktionen completion_Scan() kallas och endast avslutas vid slutförande är en signal från ursprungliga Arduino som fick meddelandet.
pseudo kod:
int höger = 10100;
int vänster = 10010;
om (bollen är på vänster sida) {
send_data(Right);
completion_Scan();
}
om (bollen är på höger sida) {
send_data(Left);
completion_Scan();
}
När send_Data anropas, hackad heltalet passerade i en 5 bitmatris med hjälp av följande algoritm:
int send_data (int num) {
data [4] = num % 10.
data [3] = (num % 100 - data [4]) / 10;
data [2] = (num % 1000 - data [3] - data [4]) / 100;
data [1] = (num % 10000 - data [2] - data [3] - data [4]) / 1000;
data [0] = (num % 100000 - data [1] - data [2] - data [3] - data [4]) / 10000;
Med hjälp av den modulo funktion, jag har skapat en algoritm för att lagra de enskilda bitarna i en unik array position kallas data. Till exempel om 10100 skickas till send_data, lagrar sedan data [4] resten av 10100 divideras med 10.
data [4] = (10100 mod 10) = 0;
data [3] = ((10100 mod 100) - 0) / 10 = 0
data [2] = 1
data [1] = 0
data [0] = 1
Arrayen hela data behandlas genom ett "för" uttalande och när värdet 1 upptäcks, en hög signal är pulsade genom kabeln för 200ms. Omvänt, när värdet 0 upptäcks, en låg signal är pulsade genom kabeln för samma tid.
för (y = 0; y < 5; y ++) {
Skicka hög eller låg
om (data[y]==1) {
Aktivera PC5 hög
}
annat {
Aktivera PC5 låg
}
Delay(200);
}
För att ta emot data, väntar mottagande Arduino alltid en initial hög signal. Omedelbart efter det upptäcks, lagras meddelandet som skickas till en matris på ett liknande sätt. Den sista koden mottagen jämförs för att fastställa den önskad effekt.
Jag har tagit den fullständiga koden för både Mechbot och EVShield. Den enda skillnaden är att jag har tagit Serial.prints för felsökning, tryck-knappar för att skicka eller avsluta kommunikation, och blinkar en LED under överföringen. Obs: du kan ladda ner båda filerna eller högerklicka och välj "öppna i ny flik" att visa koden.